导航菜单
首页 >  532 C 的QP建模和优化  > 5.1.6. C# 的LP建模与优化

5.1.6. C# 的LP建模与优化

5.1.6. C# 的LP建模与优化¶

在本节中,我们将使用 MindOpt C# API,以按行输入的形式来建模以及求解 线性规划问题示例 中的问题。

首先,创建优化模型:

31// Create model32MDOEnv env = new MDOEnv(); 33MDOModel model = new MDOModel(env); 34model.Set(MDO.StringAttr.ModelName, "LP_01");

接下来,我们通过 MDOModel.Set 将目标函数设置为 最小化,并调用 MDOModel.AddVar 来添加四个优化变量,定义其下界、上界、名称和类型(有关 MDOModel.Set 和 MDOModel.AddVar 的详细使用方式,请参考 C# API):

38// Change to minimization problem.39model.Set(MDO.IntAttr.ModelSense, MDO.MINIMIZE);4041// Add variables.42MDOVar[] x = new MDOVar[4];43x[0] = model.AddVar(0.0, 10.0, 1.0, 'C', "x0");44x[1] = model.AddVar(0.0, MDO.INFINITY, 2.0, 'C', "x1");45x[2] = model.AddVar(0.0, MDO.INFINITY, 1.0, 'C', "x2");46x[3] = model.AddVar(0.0, MDO.INFINITY, 1.0, 'C', "x3");

接着,我们开始添加线性约束:

48// Add constraints.49double[][] consV = new double[][]50{51new double[] { 1.0, 1.0, 2.0, 3.0},52new double[] { 1.0, 0, -1.0, 6.0} 53};5455MDOLinExpr tempLinExpr1 = new MDOLinExpr();56tempLinExpr1.AddTerms(consV[0], x);57model.AddConstr(tempLinExpr1, MDO.GREATER_EQUAL, 1.0, "c0");5859MDOLinExpr tempLinExpr2 = new MDOLinExpr();60tempLinExpr2.AddTerms(consV[1], x);61model.AddConstr(tempLinExpr2, MDO.EQUAL, 1.0, "c1");

问题输入完成后,再调用 MDOModel.Optimize 求解优化问题:

63// Solve the problem and populate optimization result.64model.Optimize();

求解完成后,用 MDOModel.Get 和模型属性值 ObjVal 来查看优化结果和最优目标值,以及 MDOVar.Get 和变量属性值 X 来查看优化解的目标值。 其他的属性值请查看 属性 章节。

66if (model.Get(MDO.IntAttr.Status) == MDO.Status.OPTIMAL)67{68Console.WriteLine($"Optimal objective value is: {model.Get(MDO.DoubleAttr.ObjVal)}");69Console.WriteLine("Decision variables: ");70for (int i = 0; i = 114 *c1 : 1 x0- 1 x2 + 6 x3 = 115 * Bounds16 *0

相关推荐: